package com.note.feng.leetcode.algorithms.easy.nine;

public class NineHundredTwentyFive {
    /**
     * 925 长按键入
     * 你的朋友正在使用键盘输入他的名字 name。偶尔，在键入字符 c 时，按键可能会被长按，而字符可能被输入 1 次或多次。
     *
     * 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字（其中一些字符可能被长按），那么就返回 True。
     *
     * 示例 1：
     *
     * 输入：name = "alex", typed = "aaleex"
     * 输出：true
     * 解释：'alex' 中的 'a' 和 'e' 被长按。
     * 示例 2：
     *
     * 输入：name = "saeed", typed = "ssaaedd"
     * 输出：false
     * 解释：'e' 一定需要被键入两次，但在 typed 的输出中不是这样。
     *
     * 提示：
     *
     * 1 <= name.length, typed.length <= 1000
     * name 和 typed 的字符都是小写字母
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/long-pressed-name
     */
    /**
     * 解法：双指针
     * 左右指针，分别表示 name typed 当前下标的位置，存在以下几种情况：
     * 1、对应的字符相同，同时右移一位；
     * 2、对应的字符不同，且 r 和 r - 1 的字符相同，r 右移一位；
     * 3、表示两个字符串出现了不匹配字符，直接返回 false
     * 遍历结束后，若 l == n ,则 name 的每个字符都被匹配了
     * @param name
     * @param typed
     * @return
     */
    public boolean isLongPressedName(String name, String typed) {
        int n = name.length();
        int t = typed.length();
        if(n > t){
            return false;
        }
        if(n == t){
            return name.equals(typed);
        }
        int l = 0,r = 0;
        while (r < t){
            if(l < n && name.charAt(l) == typed.charAt(r)){
                l ++;
                r ++;
            }else if(r > 0 && typed.charAt(r) == typed.charAt(r - 1)){
                r ++;
            }else{
                return false;
            }
        }
        return l == n;
    }
}
